#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "arp_link.h"

// 全局的arp链表头
ARP_LINK * arp_head = NULL;


/******************************************************************
函	数:	ARP_LINK *inner_arp_link(ARP_LINK *head,ARP_LINK* p)
功	能:	插入ARP链表
参	数:	ARP_LINK *head ARP链表头  unsigned char *ip IP地址
返回值: ARP_LINK *  查找到的节点
*******************************************************************/
ARP_LINK *inner_arp_link(ARP_LINK *head,ARP_LINK* p)
{
    // 1. 查找要插入的arp_link在原来的链表中存在与否 
    ARP_LINK* p_findarp = find_arp_byip(head, p->ip);

    if (p_findarp == NULL)  // 未查找到 ，直接插入arp 链表中
    {
        p->next = head;
        head = p;
    }else       // 里面存在对应的ip， 修改链表中的mac 为传进的mac
    {
        memcpy(p_findarp->mac , p->mac , 6);
    }
    return head;

}


/******************************************************************
函	数:	ARP_LINK* find_arp_from_link(ARP_LINK *head,unsigned char * ip)
功	能:	根据ip查找 mac
参	数:	ARP_LINK *head ARP链表头  unsigned char *ip IP地址
返回值: ARP_LINK *head ARP链表头
*******************************************************************/
ARP_LINK* find_arp_byip(ARP_LINK *head ,  unsigned char * ip)
{
    // 使用pb 来遍历链表
    ARP_LINK* pb = head;

    while(pb)
    {
        if( memcmp(pb->ip , ip , 4) == 0 )
        {
            break;
        }else{
            pb = pb->next;
        }

    }

    return pb;
}




/******************************************************************
函	数:	void free_all_arp_link()
功	能: 释放所有的arp_link 节点
参	数: 
返回值: void 
*******************************************************************/
void free_all_arp_link()
{
    while(arp_head)  // arp头节点不为空
    {
        ARP_LINK * pb = arp_head;
        arp_head = pb->next;

        free(pb);
        pb == NULL;
    }

}




